home *** CD-ROM | disk | FTP | other *** search
/ Linux 68k 2000 / Linux 68k 2000.iso / dokus / Serial-HOWTO < prev    next >
Encoding:
Text File  |  1997-11-15  |  64.9 KB  |  1,494 lines

  1.   The Linux Serial HOWTO
  2.   by Greg Hankins, greg.hankins@cc.gatech.edu
  3.   v1.11, 15 November 1997
  4.  
  5.   This document describes how to set up serial communications devices
  6.   on a Linux box.
  7.  
  8.   1.  Introduction
  9.  
  10.   This is the Linux Serial HOWTO.  All about how to set up modems and
  11.   terminals under Linux, some serial tips, and troubleshooting.  This
  12.   HOWTO addresses Linux running on Intel x86 hardware, although it might
  13.   work for other architectures.
  14.  
  15.   1.1.  Copyright
  16.  
  17.   Copyright (c) 1993 - 1997 by Greg Hankins.  This document may be
  18.   distributed under the terms set forth in the LDP license at
  19.   http://sunsite.unc.edu/LDP/COPYRIGHT.html.  This document may not be
  20.   distibuted in modified form without consent of the author.
  21.  
  22.   1.2.  New Versions Of This Document
  23.  
  24.   New versions of the Serial HOWTO will be available at
  25.   ftp://sunsite.unc.edu:/pub/Linux/docs/HOWTO/Serial-HOWTO and mirror
  26.   sites.  There are other formats, such as PostScript and DVI versions
  27.   in the other-formats directory.  The Serial HOWTO is also available at
  28.   http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html and will be posted
  29.   to comp.os.linux.answers monthly.
  30.  
  31.   1.3.  Feedback
  32.  
  33.   Please send me any questions, comments, suggestions, or additional
  34.   material.  I'm always eager to hear about what you think about the
  35.   HOWTO.  I'm also always on the lookout for improvements!  Tell me
  36.   exactly what you don't understand, or what could be clearer.  You can
  37.   reach me at greg.hankins@cc.gatech.edu via email.  All email will be
  38.   answered, although it may take me a week or so depending on how busy I
  39.   am.  I get a lot of email from root and misconfigured sites.  Please
  40.   send me email as a real person, and make sure that your email system
  41.   is working so that I will be able to reply to you.  If you don't hear
  42.   back from me within two weeks, please try sending your email again.
  43.  
  44.   I can also be reached at:
  45.   Greg Hankins
  46.   College of Computing
  47.   801 Atlantic Drive
  48.   Atlanta, GA 30332-0280
  49.   via snail mail, and at http://www.cc.gatech.edu/staff/h/Greg.Hankins/.
  50.  
  51.   Please include the version number of the Serial HOWTO when writing,
  52.   this is version 1.11.
  53.  
  54.   1.4.  Disclaimer
  55.  
  56.   Your mileage may vary.  The answers given may not work for all systems
  57.   and all setup combinations.
  58.  
  59.   2.  Supported Serial Hardware
  60.  
  61.   Linux is known to work with the following serial hardware.
  62.  
  63.   2.1.  Standard PC Serial Boards
  64.  
  65.   ╖  standard PC serial boards (COM1 - COM4), to which external serial
  66.      devices (modems, serial mice, etc...) can be connected
  67.  
  68.   ╖  standard PC internal modems (COM1 - COM4)
  69.  
  70.   ╖  Quickpath Systems Port-Folio 550e (allows IRQs of 3, 4, 5, 9, 10,
  71.      11, 12, and 15)
  72.  
  73.   Note: due to address conflicts, you cannot use COM4 and IBM8514 video
  74.   board simultaneously.  This is due to a bug in the IBM8514 board.
  75.  
  76.   2.2.  Plug And Play (PnP) Modems
  77.  
  78.   PnP modems will work with Linux.  However, I recommend against using
  79.   them because they are difficult.  There are a couple things you can
  80.   try;
  81.  
  82.   ╖  Try to disable the PnP features in the BIOS on your computer and
  83.      modem.
  84.  
  85.   ╖  Boot Win95, configure the modem, and see if the settings are
  86.      preserved when you boot Linux.  If not, then:
  87.  
  88.   ╖  Boot Win95, configure the modem, and then warm boot Linux so
  89.      that the settings are preserved.  You can do this with the loadlin
  90.      boot loader.
  91.  
  92.   ╖  Get the PnP tools from http://www.redhat.com/linux-info/pnp.
  93.  
  94.   ╖  And of course you can get a real modem.
  95.  
  96.   2.3.  Dumb Multiport Serial Boards (with 8250/16450/16550A UARTs)
  97.  
  98.   ╖  AST FourPort and clones (4 ports)
  99.  
  100.   ╖  Accent Async-4 (4 ports)
  101.  
  102.   ╖  Arnet Multiport-8 (8 ports)
  103.  
  104.   ╖  Bell Technologies HUB6 (6 ports)
  105.  
  106.   ╖  Boca BB-1004 (4 ports), BB-1008 (8 ports), BB-2016 (16 ports)
  107.  
  108.   ╖  Boca IOAT66 (6 ports)
  109.  
  110.   ╖  Boca 2by4 (4 serial ports, 2 parallel ports)
  111.  
  112.   ╖  Computone ValuePort V4-ISA (AST FourPort compatible)
  113.  
  114.   ╖  Digi PC/8 (8 ports)
  115.  
  116.   ╖  GTEK BBS-550 (8 ports)
  117.  
  118.   ╖  Longshine LCS-8880, Longshine LCS-8880+ (AST FourPort compatible)
  119.  
  120.   ╖  Moxa C104, Moxa C104+ (AST FourPort compatible)
  121.  
  122.   ╖  PC-COMM (4 ports)
  123.  
  124.   ╖  Sealevel Systems <http://www.sealevel.com> COMM-2 (2 ports), COMM-4
  125.      (4 ports) and COMM-8 (8 ports)
  126.  
  127.   ╖  SIIG I/O Expander 2S IO1812 (4 ports)
  128.  
  129.   ╖  STB-4COM (4 ports)
  130.  
  131.   ╖  Twincom ACI/550
  132.  
  133.   ╖  Usenet Serial Board II (4 ports)
  134.  
  135.   In general, Linux will support any serial board which uses a 8250,
  136.   16450, 16550, 16550A (or compatible) UART, or an internal modem which
  137.   emulates one of the above UARTs.
  138.  
  139.   Note: the BB-1004 and BB-1008 do not support DCD and RI lines, and
  140.   thus are not usable for dialin modems.  They will work fine for all
  141.   other purposes.
  142.  
  143.   2.4.  Intelligent Multiport Serial Boards
  144.  
  145.   ╖  Comtrol RocketPort (36MHz ASIC; 4, 8, 16 or 32 ports)
  146.      contact: info@comtrol.com or http://www.comtrol.com
  147.      driver status: supported by Comtrol
  148.      driver location: ftp://tsx-11.mit.edu/pub/linux/packages/comtrol
  149.  
  150.   ╖  Computone IntelliPort II (16MHz 80186; 4, 8, or 16 ports),
  151.      IntelliPort II EXpandable (20MHz 80186; 16 - 64 ports)
  152.      contact: Michael H. Warfield, mhw@wittsend.atl.ga.us
  153.      driver status: pre-ALPHA
  154.  
  155.   ╖  Cyclades Cyclom-Y (Cirrus Logic CD1400 UARTs; 8 - 32 ports),
  156.      Cyclom-Z (25MHz MIPS R3000; 8 - 128 ports)
  157.      contact: sales@cyclades.com or http://www.cyclades.com
  158.      driver status: supported by Cyclades
  159.      driver location: ftp://ftp.cyclades.com/pub/cyclades and included
  160.      in Linux kernel since version 1.1.75
  161.  
  162.   ╖  Decision PCCOM8 (8 ports)
  163.      contact: pccom8@signum.se
  164.      driver location: ftp://ftp.signum.se/pub/pccom8
  165.  
  166.   ╖  Digi PC/Xi (12.5MHz 80186; 4, 8, or 16 ports),
  167.      PC/Xe (12.5/16MHz 80186; 2, 4, or 8 ports),
  168.      PC/Xr (16MHz IDT3041; 4 or 8 ports),
  169.      PC/Xem (20MHz IDT3051; 8 - 64 ports)
  170.      contact: sales@dgii.com or http://www.dgii.com
  171.      driver status: supported by Digi
  172.      driver location: ftp://ftp.dgii.com/drivers/linux and included in
  173.      Linux kernel since version 2.0
  174.  
  175.   ╖  Digi COM/Xi (10MHz 80188; 4 or 8 ports)
  176.      contact: Simon Park, si@wimpol.demon.co.uk
  177.      driver status: ALPHA
  178.      note: Simon is often away from email for months at a time due to
  179.      his job.  Mark Hatle, fray@krypton.mankato.msus.edu has graciously
  180.      volunteered to make the driver available if you need it.  Mark is
  181.      not maintaining or supporting the driver.
  182.   ╖  Equinox SuperSerial Technology (30MHz ASIC; 2 - 128 ports)
  183.      contact: sales@equinox.com or http://www.equinox.com
  184.      driver status: supported by Equinox
  185.      driver location: ftp://ftp.equinox.com/library/sst
  186.  
  187.   ╖  GTEK Cyclone (16C654 UARTs; 6, 16 and 32 ports),
  188.      SmartCard (24MHz Dallas DS80C320; 8 ports),
  189.      BlackBoard-8A (16C654 UARTs; 8 ports),
  190.      PCSS (15/24MHz 8032; 8 ports)
  191.      contact: spot@gtek.com or http://www.gtek.com
  192.      driver status: supported by GTEK
  193.      driver location: ftp://ftp.gtek.com/pub
  194.  
  195.   ╖  Hayes ESP (COM-bic; 1 - 8 ports)
  196.      contact: Andrew J. Robinson, arobinso@nyx.net or
  197.      http://www.nyx.net/~arobinso
  198.      driver status: supported by author
  199.      driver location: http://www.nyx.net/~arobinso and included in Linux
  200.      kernel since version 2.1.15
  201.  
  202.   ╖  Maxpeed SS (Toshiba; 4, 8 and 16 ports)
  203.      contact: info@maxpeed.com or http://www.maxpeed.com
  204.      driver status: supported by Maxpeed
  205.      driver location: ftp://maxpeed.com/pub/ss
  206.  
  207.   ╖  Moxa C218 (12MHz 80286; 8 ports),
  208.      Moxa C320 (40MHz TMS320; 8 - 32 ports)
  209.      contact: info@moxa.com.tw or http://www.moxa.com.tw
  210.      driver status: supported by Moxa
  211.      driver location: ftp://ftp.moxa.com.tw/drivers/c218-320/linux
  212.  
  213.   ╖  SDL RISCom/8 (Cirrus Logic CD180; 8 ports)
  214.      contact: sales@sdlcomm.com or http://www.sdlcomm.com
  215.      driver status: supported by SDL
  216.      driver location: ftp://ftp.sdlcomm.com/pub/drivers
  217.  
  218.   ╖  Specialix SIO (20MHz Zilog Z280; 4 - 32 ports),
  219.      XIO (25MHz Zilog Z280; 4 - 32 ports)
  220.      contact: Simon Allen, simonallen@cix.compulink.co.uk
  221.      driver status: BETA
  222.      driver location:
  223.      ftp://sunsite.unc.edu/pub/Linux/kernel/patches/serial
  224.  
  225.   ╖  Stallion EasyIO-4 (4 ports), EasyIO-8 (8 ports), and
  226.      EasyConnection (8 - 32 ports) - each with Cirrus Logic CD1400
  227.      UARTs,
  228.      Stallion (8MHz 80186 CPU; 8 or 16 ports),
  229.      Brumby (10/12 MHz 80186 CPU; 4, 8 or 16 ports),
  230.      ONboard (16MHz 80186 CPU; 4, 8, 12, 16 or 32 ports),
  231.      EasyConnection 8/64 (25MHz 80186 CPU; 8 - 64 ports)
  232.      contact: sales@stallion.com or http://www.stallion.com
  233.      driver status: supported by Stallion
  234.      driver location: ftp://ftp.stallion.com/drivers/ata5/Linux and
  235.      included in linux kernel since 1.3.27
  236.  
  237.   A review of Comtrol, Cyclades, Digi, and Stallion products was printed
  238.   in the June 1995 issue of the Linux Journal.  The article is available
  239.   at http://www.ssc.com/lj/issue14.
  240.  
  241.   2.5.  Unsupported Serial Hardware
  242.  
  243.   Modems that claim to be ``Winmodems'', for example the USR Sportster
  244.   Winmodem and IBM Aptiva MWAVE, are not supported under Linux.  These
  245.   modems use proprietary designs that require special Windows drivers.
  246.   Avoid these types of modems.  In addition, stay away from modems that
  247.   require Rockwell RPI drivers for the same reason.
  248.  
  249.   Intelligent serial boards that require drivers not available for Linux
  250.   won't work either.
  251.  
  252.   3.  What Are The Names Of The Serial Ports?
  253.  
  254.   An I/O port is a way to get data into and out of a computer.  There
  255.   are many types of I/O ports such as serial ports, parallel ports, disk
  256.   drive controllers, ethernet boards, etc.  We will be dealing with
  257.   serial ports since modems and terminals are serial devices.  Each
  258.   serial port must have an I/O address, and an interrupt (IRQ).  There
  259.   are the four serial ports corresponding to COM1 - COM4:
  260.  
  261.        ttyS0 (COM1) address 0x3f8 IRQ 4
  262.        ttyS1 (COM2) address 0x2f8 IRQ 3
  263.        ttyS2 (COM3) address 0x3e8 IRQ 4
  264.        ttyS3 (COM4) address 0x2e8 IRQ 3
  265.  
  266.   If Linux does not detect any serial ports when it boots, then make
  267.   sure that serial support is enabled and compiled into the kernel. In
  268.   this document, I refer to COM1 as ttyS0, COM2 as ttyS1, COM3 as ttyS2,
  269.   and COM4 as ttyS3.  Notice that by default these devices have overlap¡
  270.   ping IRQs.  You cannot use all of the ports in this default configura¡
  271.   tion, and you must reassign different IRQs.  See section ``Can I Use
  272.   More Than Two Serial Devices?'' on setting IRQs.
  273.  
  274.   On some installations, two extra devices will be created, /dev/modem
  275.   for your modem and /dev/mouse for your mouse.  Both of these are
  276.   symbolic links to the appropriate device in /dev which you specified
  277.   during the installation (unless you have a bus mouse, then /dev/mouse
  278.   will point to the bus mouse device).
  279.  
  280.   There has been some discussion on the merits of /dev/mouse and
  281.   /dev/modem.  I strongly discourage the use of these links.  In
  282.   particular, if you are planning on using your modem for dialin you may
  283.   run into problems because the lock files may not work correctly if you
  284.   use /dev/modem. Use them if you like, but be sure they point to the
  285.   right device.  However, if you change or remove this link, some
  286.   applications (minicom for example) might need reconfiguration.
  287.  
  288.   3.1.  Serial Port Devices and Numbers In /dev
  289.  
  290.        /dev/ttyS0 major 4, minor 64    /dev/cua0 major 5, minor 64
  291.        /dev/ttyS1 major 4, minor 65    /dev/cua1 major 5, minor 65
  292.        /dev/ttyS2 major 4, minor 66    /dev/cua2 major 5, minor 66
  293.        /dev/ttyS3 major 4, minor 67    /dev/cua3 major 5, minor 67
  294.  
  295.   Note that all distributions should come with these devices already
  296.   made correctly.  You can verify this by typing:
  297.  
  298.   linux% ls -l /dev/cua*
  299.   linux% ls -l /dev/ttyS*
  300.  
  301.   3.1.1.  Creating Devices In /dev
  302.  
  303.   If you don't have a device, you will have to create it with the mknod
  304.   command.  Example, suppose you needed to create devices for ttyS0:
  305.  
  306.        linux# mknod -m 666 /dev/cua0 c 5 64
  307.        linux# mknod -m 666 /dev/ttyS0 c 4 64
  308.  
  309.   You can use the MAKEDEV script, which lives in /dev.  This simplifies
  310.   the making of devices.  For example, if you needed to make the devices
  311.   for ttyS0 you would type:
  312.  
  313.        linux# cd /dev
  314.        linux# ./MAKEDEV ttyS0
  315.  
  316.   This handles the devices creation for the incoming and outgoing
  317.   devices, and should set the correct permissions.
  318.  
  319.   3.2.  Notes For Dumb Multiport Boards
  320.  
  321.   The devices your multiport board uses depends on what kind of board
  322.   you have.  These are listed in detail in rc.serial which comes with
  323.   the setserial program.  I highly recommend getting the latest version
  324.   of setserial if you are trying to use multiport boards.  You will
  325.   probably need to create these devices.  Either use the mknod command,
  326.   or the MAKEDEV script.  Devices for multiport boards are made by
  327.   adding ``64 + port number''.  So, if you wanted to create devices for
  328.   ttyS17, you would type:
  329.  
  330.        linux# mknod -m 666 /dev/cua17 c 5 81
  331.        linux# mknod -m 666 /dev/ttyS17 c 4 81
  332.  
  333.   Note that ``64 + 17 = 81''.  Using the MAKEDEV script, you would type:
  334.  
  335.        linux# cd /dev
  336.        linux# ./MAKEDEV ttyS17
  337.  
  338.   Note: the SIIG manual for the IO1812 listing for COM5-COM8 is wrong.
  339.   They should be COM5=0x250, COM6=0x258, COM7=0x260, and COM8=0x268.
  340.  
  341.   Note: the Digi PC/8 Interrupt Status Register is at 0x140.
  342.  
  343.   Note: for an AST Fourport, you might need to specify skip_test in
  344.   rc.serial.
  345.  
  346.   3.3.  Notes For Intelligent Multiport Boards
  347.  
  348.   Read the information that comes with the driver.  These boards use
  349.   special devices, and not the standard ones.  This information varies
  350.   depending on your hardware.
  351.  
  352.   4.  Interesting Programs You Should Know About
  353.  
  354.   4.1.  What is getty?
  355.  
  356.   getty is a program that handles the login process when you log onto a
  357.   Unix box.  You will need to use getty if you want to be able to dial
  358.   in to your Linux machine with a modem.  You do not need to use getty
  359.   if you only want to dial out with your modem.  There are three
  360.   versions that are commonly used with Linux: getty_ps, mgetty and
  361.   agetty.  The syntax for these programs differs, so be sure to check
  362.   and make sure that you are using the correct syntax         for
  363.   whatever getty you use.
  364.  
  365.   4.1.1.  About getty_ps
  366.  
  367.   Most distributions come with the getty_ps package installed.  It
  368.   contains two programs:  getty is used for console and terminal
  369.   devices, and uugetty for modems.  I use this version of getty, so that
  370.   is what I will focus on.
  371.  
  372.   4.1.2.  About mgetty
  373.  
  374.   mgetty is a version of getty for use with modems.  In addition to
  375.   allowing dialup logins, mgetty also provides FAX support and auto PPP
  376.   detection. The mgetty documentation is very good, and does not need
  377.   supplementing.  Please refer to it for installation instructions.  You
  378.   can find the latest information on mgetty at
  379.   http://www.leo.org/~doering/mgetty/.
  380.  
  381.   4.1.3.  About agetty
  382.  
  383.   agetty is the third variation of getty. It's a simple, completely
  384.   functional implementation of getty which is best suited for virtual
  385.   consoles or terminals rather than modems.
  386.  
  387.   4.2.  What is setserial?
  388.  
  389.   setserial is a program which allows you to look at and change various
  390.   attributes of a serial device, including its port address, its
  391.   interrupt, and other serial port options.  You can find out what
  392.   version you have by running setserial with no arguments.
  393.  
  394.   When your Linux system boots, only ttyS{0-3} are configured, using the
  395.   default IRQs of 4 and 3.  So, if you have any other serial ports
  396.   provided by other boards or if ttyS{0-3} have a non-standard IRQ, you
  397.   must use this program in order to configure those serial ports.  For
  398.   the full listing of options, consult the man page.
  399.  
  400.   5.  How Do I Dial Out With My Modem?
  401.  
  402.   5.1.  Hardware Requirements
  403.  
  404.   First, make sure you have the right cable.  Your modem requires a
  405.   straight through cable, with no pins crossed.  Any computer store
  406.   should have these.  Make sure you get the correct gender.  If you are
  407.   using the DB25 serial port, it will always be the male DB25.  Do not
  408.   confuse it with the parallel port, which is the female DB25.  Hook up
  409.   your modem to one of your serial ports.  Consult your modem manual on
  410.   how to do this if you need help.
  411.  
  412.   5.1.1.  Notes On Internal Modems
  413.  
  414.   For an internal modem, you will not need a cable.  An internal modem
  415.   does not need a serial port, it has one built in.  All you need to do
  416.   is configure it to use an interrupt that is not being used, and
  417.   configure the port I/O address.  Consult your modem manual if you get
  418.   stuck.  Also, see section ``Can I Use More Than   Two Serial
  419.   Devices?'' if you need help on choosing interrupts or addresses.
  420.  
  421.   On some motherboards you will have to disable the serial port that the
  422.   modem is replacing in order to avoid conflicts.  This may be done with
  423.   jumpers or in the BIOS settings, depending on your motherboard.
  424.   Consult your motherboard manual.
  425.  
  426.   Due to a bug in IBM8514 video boards, you may encounter problems if
  427.   you want your internal modem to be on ttyS3.  If Linux does not detect
  428.   your internal modem on ttyS3, you can use setserial and the modem will
  429.   work fine.  Internal modems on ttyS{0-2} should not have any problems
  430.   being detected.  Linux does not do any autoconfiguration on ttyS3 due
  431.   to this video board bug.
  432.  
  433.   5.2.  Talking To Your Modem
  434.  
  435.   Use kermit or some other communications program to test the setup,
  436.   before you go jumping into complex things SLIP or PPP.  You can find
  437.   the latest version of kermit at http://www.columbia.edu/kermit/.  For
  438.   example, say your modem was on ttyS3, and it's speed was 115200 bps.
  439.   You would do the following:
  440.  
  441.        linux# kermit
  442.        C-Kermit 6.0.192, 6 Sep 96, for Linux
  443.         Copyright (C) 1985, 1996,
  444.          Trustees of Columbia University in the City of New York.
  445.        Default file-transfer mode is BINARY
  446.        Type ? or HELP for help.
  447.        C-Kermit>set line /dev/ttyS3
  448.        C-Kermit>set carrier-watch off
  449.        C-Kermit>set speed 115200
  450.        /dev/ttyS3, 115200 bps
  451.        C-Kermit>c
  452.        Connecting to /dev/ttyS3, speed 115200.
  453.        The escape character is Ctrl-\ (ASCII 28, FS)
  454.        Type the escape character followed by C to get back,
  455.        or followed by ? to see other options.
  456.        ATE1Q0V1                           ; you type this and then the Enter key
  457.        OK                                 ; modem should respond with this
  458.  
  459.   If your modem responds to AT commands, you can assume your modem is
  460.   working correctly on the Linux side.  Now try calling another modem by
  461.   typing:
  462.  
  463.        ATDT7654321
  464.  
  465.   where 7654321 is a phone number.  Use ATDP instead of ATDT if you have
  466.   a pulse line.  If the call goes through, your modem is working.
  467.  
  468.   To get back to the kermit prompt, hold down the Ctrl key, press the
  469.   backslash key, then let go of the Ctrl key, then press the C key:
  470.  
  471.        Ctrl-\-C
  472.        (Back at linux)
  473.        C-Kermit>quit
  474.        linux#
  475.  
  476.   This was just a test using the primitive "by-hand" dialing method.
  477.   The normal method is to let kermit do the dialing for you with its
  478.   built-in modem database and automatic dialing features, for example
  479.   using a US Robotics (USR) modem:
  480.  
  481.        linux# kermit
  482.        C-Kermit 6.0.192, 6 Sep 1997, for Linux
  483.         Copyright (C) 1985, 1996,
  484.          Trustees of Columbia University in the City of New York.
  485.        Default file-transfer mode is BINARY
  486.        Type ? or HELP for help
  487.        C-Kermit>set modem type usr        ; Select modem type
  488.        C-Kermit>set line /dev/ttyS3       ; Select communication device
  489.        C-Kermit>set speed 115200          ; Set the dialing speed
  490.        C-Kermit>dial 7654321              ; Dial
  491.         Number: 7654321
  492.         Device=/dev/ttyS3, modem=usr, speed=115200
  493.         Call completed.<BEEP>
  494.        Connecting to /dev/ttyS3, speed 115200
  495.        The escape character is Ctrl-\ (ASCII 28, FS).
  496.        Type the escape character followed by C to get back,
  497.        or followed by ? to see other options.
  498.  
  499.        Welcome to ...
  500.  
  501.        login:
  502.  
  503.   See section ``Communications Programs'' about communications programs
  504.   if you need some pointers.
  505.  
  506.   When you dial out with your modem, set the speed to the highest bps
  507.   rate that your modem supports.  Versions of Linux with a libc version
  508.   greater then 5.x have support for speeds up to 115200 bps.  libc
  509.   usually lives in /lib, so look there for what version you have.  If
  510.   Linux does not recognize a speed of 57600 or 115200 bps, then you must
  511.   use the setserial program to set your serial port to a higher speed.
  512.   See section ``How Do I Set Up My Serial Ports For Higher Speeds?'' for
  513.   how to do this.  Then, set the speed to 38400 bps in your comm
  514.   program.
  515.  
  516.   5.3.  Dial Out Modem Configuration
  517.  
  518.   For dial out use only, you can configure your modem however you want.
  519.   If you intend to use your modem for dialin, you must configure your
  520.   modem at the same speed that you intend to run getty at.  So, if you
  521.   want to run getty at 38400 bps, set your speed to 38400 bps when you
  522.   configure your modem.  This is done to prevent speed mismatches
  523.   between your computer and modem.  In general, factory defaults that
  524.   enable error correction and hardware flow control are the best setting
  525.   for dial out modems, consult your modem manual for these settings.
  526.  
  527.   5.4.  Hardware Flow Control
  528.  
  529.   If your modem supports hardware flow control (RTS/CTS), I highly
  530.   recommend you use it. This is particularly important for modems that
  531.   support data compression.  First, you have to enable RTS/CTS flow
  532.   control on the serial port itself.  This is best done on startup, like
  533.   in /etc/rc.d/rc.local or /etc/rc.d/rc.serial.  Make sure that these
  534.   files are being run from the main rc.sysinit file!  You need to do the
  535.   following for each serial port you want to enable hardware flow
  536.   control on:
  537.  
  538.        stty crtscts < /dev/ttyS3
  539.  
  540.   You must also enable RTS/CTS flow control on your modem.  Consult your
  541.   modem manual on how to do this, as it varies between modem manufactur¡
  542.   ers.  Be sure to save your modem configuration if your modem supports
  543.   stored profiles.
  544.  
  545.   6.  How Do I Dial In And Out With My Modem Using getty_ps?
  546.  
  547.   Get your modem to dial out correctly.  If you haven't read section
  548.   ``How Do I Dial Out With My Modem'' go read it now!  It contains very
  549.   important setup information.  You do not need to read this section if
  550.   you only want to dial out with your modem.
  551.  
  552.   6.1.  Dial In And Out Modem Configuration
  553.  
  554.   For dialin and dialout use, you have to set up your modem a certain
  555.   way (again, using AT commands on your modem):
  556.  
  557.        E1       command echo ON
  558.        Q0       result codes are reported
  559.        V1       verbose ON
  560.        S0=0     never answer (uugetty handles this with the WAITFOR option)
  561.  
  562.   If you don't set these correctly, your INIT string in your config file
  563.   may fail, hosing the whole process.  But, more on config files
  564.   below...
  565.  
  566.   &C1     DCD is on after connect only
  567.   &S0     DSR is always on
  568.           DTR on/off resets modem (depends on manufacturer - RTFM)
  569.  
  570.   These affect what your modem does when calls start and end.
  571.  
  572.   If your modem does not support a stored profile, you can set these
  573.   through the INIT string in your config file.  See below.  Some modems
  574.   come with DIP switches that affect register settings.  Be sure these
  575.   are set correctly, too.
  576.  
  577.   I have started a collection of modem setups for different types of
  578.   modems.  So far, I only have a few of them, if you would like to send
  579.   me your working configuration, please do so!  You can get them at
  580.   ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs.
  581.  
  582.   Note: to get my USR Courier V.34 modem to reset correctly when DTR
  583.   drops, I had to set &D2 and S13=1 (this sets bit 0 of register S13).
  584.   This has been confirmed to work on USR Sportster V.34 modems as well.
  585.  
  586.   Note: some Supra modems treat DCD differently than other modems.  If
  587.   you are using a Supra, try setting &C0 and not &C1.  You must also set
  588.   &D2 to handle DTR correctly.
  589.  
  590.   6.2.  Installing getty_ps
  591.  
  592.   Get the latest version from sunsite.unc.edu:/pub/Linux/system/serial.
  593.   In particular, if you want to use high speeds (57600 and 115200 bps),
  594.   you must get version 2.0.7j or later.  You must also have libc 5.x or
  595.   greater.
  596.  
  597.   By default, getty_ps will be configured to be Linux FSSTND (File
  598.   System Standard) compliant, which means that the binaries will be in
  599.   /sbin, and the config files will be named /etc/conf.{uu}getty.ttySN.
  600.   This is not apparent from the documentation!  It will also expect lock
  601.   files to go in /var/lock.  Make sure you have the /var/lock directory.
  602.  
  603.   If you don't want FSSTND compliance, binaries will go in /etc, config
  604.   files will go in /etc/default/{uu}getty.ttySN, and lock files will go
  605.   in /usr/spool/uucp.  I recommend doing things this way if you are
  606.   using UUCP, because UUCP will have problems if you move the lock files
  607.   to where it isn't looking for them.
  608.  
  609.   getty_ps can also use syslogd to log messages.  See the man pages for
  610.   syslogd(1) and syslog.conf(5) for setting up syslogd, if you don't
  611.   have it running already.  Messages are logged with priority LOG_AUTH,
  612.   errors use LOG_ERR, and debugging uses LOG_DEBUG.  If you don't want
  613.   to use syslogd you can edit tune.h in the getty_ps source files to use
  614.   a log file for messages instead, namely /var/adm/getty.log by default.
  615.  
  616.   Decide on if you want FSSTND compliance and syslog capability.  You
  617.   can also choose a combination of the two.  Edit the Makefile, tune.h
  618.   and config.h to reflect your decisions.  Then compile and install
  619.   according to the instructions included with the package.
  620.  
  621.   From this point on, all references to getty will refer to getty_ps.
  622.   References to uugetty will refer to the uugetty that comes with the
  623.   getty_ps package.  These instructions will not work for mgetty or
  624.   agetty.
  625.  
  626.   6.3.  Setting up uugetty
  627.  
  628.   For dialing into, and out from your modem, we want to use uugetty.
  629.   uugetty does important lock file checking.  Update /etc/gettydefs to
  630.   include entries for modems if they aren't already there (note that the
  631.   entries point to each other, these are not         for fixed speed -
  632.   blank lines are needed between each entry):
  633.  
  634.        # Modem entries
  635.        115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600
  636.  
  637.        57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400
  638.  
  639.        38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200
  640.  
  641.        19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600
  642.  
  643.        9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400
  644.  
  645.        2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200
  646.  
  647.   If you have a 9600 bps or faster modem with data compression, you can
  648.   lock your serial port speed and let the modem handle the transitions
  649.   to other speeds. Then, instead of the step down series of lines listed
  650.   above /etc/gettydefs only needs to contain one line for the modem, for
  651.   example:
  652.  
  653.        # 115200 fixed speed
  654.        F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200
  655.  
  656.   If you have your modem set up to do RTS/CTS hardware flow control, you
  657.   can add CRTSCTS to the entries:
  658.  
  659.        # 115200 fixed speed with hardware flow control
  660.        F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200
  661.  
  662.   If you want, you can make uugetty print interesting things in the
  663.   login banner.  In my examples, I have the system name, the serial
  664.   line, and the current bps rate.  You can add other things:
  665.  
  666.          @B    The current (evaluated at the time the @B is seen) bps rate.
  667.          @D    The current date, in MM/DD/YY.
  668.          @L    The serial line to which getty is attached.
  669.          @S    The system name.
  670.          @T    The current time, in HH:MM:SS (24-hour).
  671.          @U    The number of currently signed-on users.  This is  a
  672.                count of the number of entries in the /etc/utmp file
  673.                that have a non-null ut_name field.
  674.          @V    The value of VERSION, as given in the defaults file.
  675.          To display a single '@' character, use either '\@' or '@@'.
  676.  
  677.   Next, make sure that you have an outgoing and incoming device for the
  678.   serial port your modem is on.  If you have your modem on ttyS3 you
  679.   will need the /dev/cua3, and /dev/ttyS3 devices.  If you don't have
  680.   the correct devices, see section ``Creating Devices In <TT>/dev</TT>''
  681.   on how to create devices, and create the devices.  If you want to be
  682.   able to dial out with your modem while uugetty is watching the port
  683.   for logins, use the /dev/cuaN device instead of the /dev/ttySN device.
  684.  
  685.   When you are done editing /etc/gettydefs, you can verify that the
  686.   syntax is correct by doing:
  687.  
  688.        linux# getty -c /etc/gettydefs
  689.  
  690.   6.4.  Customizing uugetty
  691.  
  692.   There are lots of parameters you can tweak for each port you have.
  693.   These are implemented in separate config files for each port.  The
  694.   file /etc/conf.uugetty will be used by all instances of uugetty, and
  695.   /etc/conf.uugetty.ttySN will only be used by that one port.  Sample
  696.   default config files can be found with the getty_ps source files,
  697.   which come with most Linux distributions.  Due to space concerns, they
  698.   are not listed here.  Note that if you are using older versions of
  699.   getty (older than 2.0.7e), or aren't using FSSTND, then the default
  700.   file will be /etc/default/uugetty.ttySN.  My /etc/conf.uugetty.ttyS3
  701.   looks like this:
  702.  
  703.        # sample uugetty configuration file for a Hayes compatible modem to allow
  704.        # incoming modem connections
  705.        #
  706.        # alternate lock file to check... if this lock file exists, then uugetty is
  707.        # restarted so that the modem is re-initialized
  708.        ALTLOCK=cua3
  709.        ALTLINE=cua3
  710.        # line to initialize
  711.        INITLINE=cua3
  712.        # timeout to disconnect if idle...
  713.        TIMEOUT=60
  714.        # modem initialization string...
  715.        # format: <expect> <send> ... (chat sequence)
  716.        INIT="" AT\r OK\r\n
  717.        WAITFOR=RING
  718.        CONNECT="" ATA\r CONNECT\s\A
  719.        # this line sets the time to delay before sending the login banner
  720.        DELAY=1
  721.        #DEBUG=010
  722.  
  723.   Add the following line to your /etc/inittab, so that uugetty is run on
  724.   your serial port (substituting in the correct information for your
  725.   environment - config file location, port, speed, and default terminal
  726.   type):
  727.  
  728.        S3:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100
  729.  
  730.   Restart init:
  731.  
  732.        linux# init q
  733.  
  734.   For the speed parameter in your /etc/inittab, you want to use the
  735.   highest bps rate that your modem supports.
  736.  
  737.   Now Linux will be watching your serial port for connections.  Dial in
  738.   from another machine and login to you Linux system.
  739.  
  740.   uugetty has a lot more options, see the man page for getty(1m) for a
  741.   full description.  Among other things there is a scheduling feature,
  742.   and a ringback feature.
  743.  
  744.   7.  How Do I Set Up A Terminal Connected To My PC?
  745.  
  746.   The instructions in this section will work for connecting terminals,
  747.   as well as other computers to the serial port on your Linux box.
  748.  
  749.   7.1.  Hardware Requirements
  750.  
  751.   Make sure you have the right kind of cable.  A null modem cable bought
  752.   at a computer store will do it.  But it must be a null modem cable!
  753.   Many computer stores advertise this kind of cable as a serial printer
  754.   cable.  Make sure you are using your serial port, the male DB25 or the
  755.   DB9, and not your parallel port (female DB25 or centronics).
  756.  
  757.   For a DB25 connector, you need a minimum of:
  758.  
  759.           PC male DB25                            Terminal DB25
  760.           TxD   Transmit Data         2 --> 3     RxD   Receive Data
  761.           RxD   Receive Data          3 <-- 2     TxD   Transmit Data
  762.           SG    Signal Ground         7 --- 7     SG    Signal Ground
  763.  
  764.   If you want to have hardware handshaking signals, you must have a full
  765.   null modem cable:
  766.  
  767.           PC male DB25                            Terminal DB25
  768.           TxD   Transmit Data         2 --> 3     RxD   Receive Data
  769.           RxD   Receive Data          3 <-- 2     TxD   Transmit Data
  770.           RTS   Request To Send       4 --> 5     CTS   Clear To Send
  771.           CTS   Clear To Send         5 <-- 4     RTS   Request To Send
  772.           DSR   Data Set Ready        6
  773.                                       |
  774.           DCD   Carrier Detect        8 <-- 20    DTR   Data Terminal Ready
  775.           SG    Signal Ground         7 --- 7     SG    Signal Ground
  776.                                             6     DSR   Data Set Ready
  777.                                             |
  778.           DTR   Data Terminal Ready  20 --> 8     DCD   Carrier Detect
  779.  
  780.   If you have a DB9 connector on your serial port, try the following:
  781.  
  782.           PC DB9                                  Terminal DB25
  783.           RxD   Receive Data          2 <-- 2     TxD   Transmit Data
  784.           TxD   Transmit Data         3 --> 3     RxD   Receive Data
  785.           SG    Signal Ground         5 --- 7     SG    Signal Ground
  786.  
  787.   Alternatively, a full DB9-DB25 null modem cable:
  788.  
  789.           PC DB9                                  Terminal DB25
  790.           RxD   Receive Data          2 <-- 2     TxD   Transmit Data
  791.           TxD   Transmit Data         3 --> 3     RxD   Receive Data
  792.                                             6     DSR   Data Set Ready
  793.                                             |
  794.           DTR   Data Terminal Ready   4 --> 8     DCD   Carrier Detect
  795.           GND   Signal Ground         5 --- 7     GND   Signal Ground
  796.           DCD   Carrier Detect        1
  797.                                       |
  798.           DSR   Data Set Ready        6 <-- 20    DTR   Data Terminal Ready
  799.           RTS   Request To Send       7 --> 5     CTS   Clear To Send
  800.           CTS   Clear To Send         8 <-- 4     RTS   Request To Send
  801.           (RI   Ring Indicator        9 not needed)
  802.  
  803.   (Yes, the pins 2 and 3 really do have the opposite meanings in DB9
  804.   connectors than in DB25 connectors!)
  805.  
  806.   If you are not using a full null modem cable, you might have to do the
  807.   following trick: on your computer side of the connector, connect RTS
  808.   and CTS together, and also connect DSR, DCD and DTR together.  This
  809.   way, when the computer wants a certain handshaking signal, it will get
  810.   it (from itself).
  811.  
  812.   Now that you have the right kind of cable, connect your terminal to
  813.   your computer.  If you can, tell the terminal to ignore modem control
  814.   signals.  Try using 9600 bps, 8 data bits, 1 stop bit, no parity bits
  815.   for the terminal's setup.
  816.  
  817.   7.2.  Setting up getty
  818.  
  819.   Add entries for getty to use for your terminal in /etc/gettydefs if
  820.   there they aren't already there:
  821.  
  822.   # 38400 bps Dumb Terminal entry
  823.   DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
  824.  
  825.   # 19200 bps Dumb Terminal entry
  826.   DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
  827.  
  828.   # 9600 bps Dumb Terminal entry
  829.   DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
  830.  
  831.   If you want, you can make getty print interesting things in the login
  832.   banner.  In my examples, I have the system name and the serial line
  833.   printed.  You can add other things:
  834.  
  835.        @B    The current (evaluated at the time the @B is seen) bps rate.
  836.        @D    The current date, in MM/DD/YY.
  837.        @L    The serial line to which getty is attached.
  838.        @S    The system name.
  839.        @T    The current time, in HH:MM:SS (24-hour).
  840.        @U    The number of currently signed-on users.  This is  a
  841.              count of the number of entries in the /etc/utmp file
  842.              that have a non-null ut_name field.
  843.        @V    The value of VERSION, as given in the defaults file.
  844.        To display a single '@' character, use either '\@' or '@@'.
  845.  
  846.   When you are done editing /etc/gettydefs, you can verify that the
  847.   syntax is correct by doing:
  848.  
  849.        linux# getty -c /etc/gettydefs
  850.  
  851.   Make sure there is no getty or uugetty config file for the serial port
  852.   that your terminal is attached to (/etc/default/{uu}getty.ttySN or
  853.   /etc/conf.{uu}getty.ttySN), as this will probably interfere with
  854.   running getty on a terminal.  Remove the file if it exits.
  855.  
  856.   Edit your /etc/inittab file to run getty on the serial port
  857.   (substituting in the correct information for your environment - port,
  858.   speed, and default terminal type):
  859.  
  860.        S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100
  861.  
  862.   Restart init:
  863.  
  864.        linux# init q
  865.  
  866.   At this point, you should see a login prompt on your terminal.  You
  867.   may have to hit return to get the terminal's attention.
  868.   7.3.  Notes On Setting Up A PC As A Terminal
  869.  
  870.   Many people set up other PCs as terminals connected to Linux boxen.
  871.   For example, old 8088 or 80286 PCs are perfect for this purpose.  All
  872.   you need is a DOS boot disk containing a version of DOS suitable for
  873.   your terminal-PC, and a communications program for your terminal-PC to
  874.   run.  kermit works very well for this purpose.  You can find
  875.   precompiled versions of kermit for every OS in existence at
  876.   http://www.columbia.edu/kermit/.  Other popular DOS comm programs such
  877.   as telix and procomm will work equally well.  Be sure to input correct
  878.   serial port information into your terminal-PC's communications setup.
  879.  
  880.   8.  Can I Use More Than Two Serial Devices?
  881.  
  882.   You don't need to read this section, unless you want to use three or
  883.   more serial devices... (assuming you don't have a multiport board).
  884.  
  885.   Providing you have another spare serial port, yes you can.  The number
  886.   of serial ports you can use is limited by the number of interrupts
  887.   (IRQs) and port I/O addresses we have to use.  This is not a Linux
  888.   limitation, but a limitation of the PC bus.  Each serial devices must
  889.   be assigned it's own interrupt and address.  A serial device can be a
  890.   serial port, an internal modem, or a multiport serial board.
  891.  
  892.   Multiport serial boards are specially designed to have multiple serial
  893.   ports that share the same IRQ for all serial ports on the board.
  894.   Linux gets data from them by using a different I/O address for each
  895.   port on the board.
  896.  
  897.   8.1.  Choosing Serial Device Interrupts
  898.  
  899.   Your PC will normally come with ttyS0 and ttyS2 at IRQ 4, and ttyS1
  900.   and ttyS3 at IRQ 3.  You can see what IRQs are in use by looking at
  901.   /proc/interrupts.  To use more than two serial devices, you will have
  902.   to reassign an interrupt.  A good choice is to reassign an interrupt
  903.   from your parallel port.  Your PC normally comes with IRQ 5 and IRQ 7
  904.   set up as interrupts for your parallel ports, but few people use two
  905.   parallel ports.  You can reassign one of the interrupts to a serial
  906.   device, and still happily use a parallel port.  You will need the
  907.   setserial program to do this.  In addition, you have to play with the
  908.   jumpers on your boards, check the docs for your board.  Set the
  909.   jumpers to the IRQ you want for each port.
  910.  
  911.   You will need to set things up so that there is one, and only one
  912.   interrupt for each serial device.  Here is how I set mine up in
  913.   /etc/rc.d/rc.local - you should do it upon startup somewhere:
  914.  
  915.                /sbin/setserial /dev/ttyS0 irq 3        # my serial mouse
  916.                /sbin/setserial /dev/ttyS1 irq 4        # my Wyse dumb terminal
  917.                /sbin/setserial /dev/ttyS2 irq 5        # my Zoom modem
  918.                /sbin/setserial /dev/ttyS3 irq 9        # my USR modem
  919.  
  920.   Standard IRQ assignments:
  921.  
  922.                 IRQ  0    Timer channel 0
  923.                 IRQ  1    Keyboard
  924.                 IRQ  2    Cascade for controller 2
  925.                 IRQ  3    Serial port 2
  926.                 IRQ  4    Serial port 1
  927.                 IRQ  5    Parallel port 2
  928.                 IRQ  6    Floppy diskette
  929.                 IRQ  7    Parallel port 1
  930.                 IRQ  8    Real-time clock
  931.                 IRQ  9    Redirected to IRQ2
  932.                 IRQ 10    not assigned
  933.                 IRQ 11    not assigned
  934.                 IRQ 12    not assigned
  935.                 IRQ 13    Math coprocessor
  936.                 IRQ 14    Hard disk controller 1
  937.                 IRQ 15    Hard disk controller 2
  938.  
  939.   There is really no Right Thing to do when choosing interrupts.  Just
  940.   make sure it isn't being used by the motherboard, or any other boards.
  941.   2, 3, 4, 5, or 7  is a good choice.  ``not assigned'' means that
  942.   currently nothing standard uses these IRQs.  Also note that IRQ 2 is
  943.   the same as IRQ 9.  You can call it either 2 or 9, the serial driver
  944.   is very understanding.  If you have a serial board with a 16-bit bus
  945.   connector, you can also use IRQ 10, 11, 12 or 15.
  946.  
  947.   Just make sure you don't use IRQ 0, 1, 6, 8, 13 or 14!  These are used
  948.   by your mother board.  You will make her very unhappy by taking her
  949.   IRQs.  When you are done, double-check /proc/interrupts and make sure
  950.   there are no conflicts.
  951.  
  952.   8.2.  Setting Serial Device Addresses
  953.  
  954.   Next, you must set the port address.  Check the manual on your board
  955.   for the jumper settings.  Like interrupts, there can only be one
  956.   serial device at each address.  Your ports will usually come
  957.   configured as follows:
  958.  
  959.                ttyS0 address 0x3f8
  960.                ttyS1 address 0x2f8
  961.                ttyS2 address 0x3e8
  962.                ttyS3 address 0x2e8
  963.  
  964.   Choose which address you want each serial device to have and set the
  965.   jumpers accordingly.  I have my modem on ttyS3, my mouse on ttyS0, and
  966.   my terminal on ttyS2.
  967.  
  968.   When you reboot, Linux should see your serial ports at the address you
  969.   set them.  The IRQ Linux sees may not correspond to the IRQ you set
  970.   with the jumpers.  Don't worry about this.  Linux does not do any IRQ
  971.   detection when it boots, because IRQ detection is dicy and can be
  972.   fooled.  Use setserial to tell Linux what IRQ the port is using.  You
  973.   can check /proc/ioports to see what I/O port addresses are in use
  974.   after Linux boots.
  975.  
  976.   9.  How Do I Set Up My Serial Ports For Higher Speeds?  What Speed
  977.   Should I Use With My Modem?
  978.  
  979.   This section should help you figure out what speed to use when using
  980.   your modem with a communications program, or with a getty program.
  981.  
  982.   ╖  If you have something slower than a 9600 bps (V.32) modem, set your
  983.      speed to the highest speed your modem supports.  For example 300
  984.      bps (V.21/Bell 103), 1200 bps (V.22/Bell 212A), or 2400 bps
  985.      (V.22bis).
  986.  
  987.   ╖  If you have a 9600 bps (V.32) modem, with V.42bis data compression,
  988.      use 38400 bps as your speed.  V.42bis compression has a theoretical
  989.      rate of 4:1, thus ``4 * 9600 = 38400''.
  990.  
  991.   ╖  If you have a 14400 bps (V.32bis) modem, with V.42bis data
  992.      compression, use setserial with the spd_hi flag to configure your
  993.      serial port to use 57600 bps (4 * 14400 = 57600).
  994.  
  995.      Use the spd_vhi flag if you have a 28800 or 33600 bps (V.FC or
  996.      V.34) modem (4 * 28800 = 115200).
  997.  
  998.      Then, use 38400 bps as the speed in your communication program, or
  999.      /etc/inittab.  This is now the high speed you have set.  Make sure
  1000.      you have 16550A UARTs.
  1001.  
  1002.      If your libc version is at least 5.x, there will be speeds named
  1003.      57600 and 115200.  libc lives in /lib, so look there for what
  1004.      version you have.  You can use these directly (without using
  1005.      setserial), if your applications have been compiled to take
  1006.      advantage of this.  There are many distributions out there, so the
  1007.      best thing to do would be to try using these higher speeds if you
  1008.      have a recent version of a Linux distribution.
  1009.  
  1010.   Test your setserial setting on the command line first, and then when
  1011.   you have them working, put them into /etc/rc.d/rc.serial or
  1012.   /etc/rc.d/rc.local so that they are done at startup.  In my
  1013.   /etc/rc.d/rc.local, I set ttyS3 to 115200 bps by doing:
  1014.  
  1015.        /sbin/setserial /dev/ttyS3 spd_vhi
  1016.  
  1017.   Make sure that you are using a valid path for setserial, and a valid
  1018.   device name.  You can check the settings of a serial port by running:
  1019.  
  1020.        setserial -a /dev/ttyS3
  1021.  
  1022.   10.  Communications Programs And Utilities
  1023.  
  1024.   Here is a list of some communication software you can choose from,
  1025.   available via FTP, if they didn't come with your distribution.
  1026.  
  1027.   ╖  ecu - a communications program
  1028.  
  1029.   ╖  C-Kermit <http://www.columbia.edu/kermit/> - portable, scriptable,
  1030.      serial and TCP/IP communications including file transfer and
  1031.      character-set translation
  1032.  
  1033.   ╖  minicom - telix-like communications program
  1034.  
  1035.   ╖  procomm - procomm-like communications program with zmodem
  1036.  
  1037.   ╖  seyon - X based communication program
  1038.  
  1039.   ╖  xc - xcomm communication package
  1040.  
  1041.   ╖  Other useful programs are term and SLiRP.  They offer TCP/IP
  1042.      functionality using a shell account.
  1043.  
  1044.   ╖  screen is another multi-session program.  This one behaves like the
  1045.      virtual consoles.
  1046.  
  1047.   ╖  callback is a program that will have your modem call you back.
  1048.  
  1049.   ╖  mgetty+fax handles FAX stuff, and provides an alternate getty.
  1050.  
  1051.   ╖  ZyXEL is a control program for ZyXEL U-1496 modems.  It handles
  1052.      dialin, dialout, dial back security, FAXing, and voice mailbox
  1053.      functions.
  1054.  
  1055.   ╖  SLIP and PPP software can be found at
  1056.      ftp://sunsite.unc.edu/pub/Linux/system/network/serial.
  1057.  
  1058.   ╖  Other things can be found on
  1059.      ftp://sunsite.unc.edu/pub/Linux/system/serial and
  1060.      ftp://sunsite.unc.edu/pub/Linux/apps/serialcomm or one of the many
  1061.      mirrors.  These are the directories where serial programs are kept.
  1062.  
  1063.   11.  Serial Tips And Miscellany
  1064.  
  1065.   Here are some serial tips you might find helpful...
  1066.  
  1067.   11.1.  kermit and zmodem
  1068.  
  1069.   To use zmodem with kermit, add the following to your .kermrc:
  1070.  
  1071.        define rz !rz < /dev/ttyS3 > /dev/ttyS3
  1072.        define sz !sz \%0 > /dev/ttyS3 < /dev/ttyS3
  1073.  
  1074.   Be sure to put in the correct port your modem is on.  Then, to use it,
  1075.   just type rz or sz <filename> at the kermit prompt.
  1076.  
  1077.   11.2.  Setting Terminal Types Automagically
  1078.  
  1079.   To set your terminal type automagically when you log in, add the
  1080.   terminal type to the entry in /etc/inittab.  If I have a vt100
  1081.   terminal on ttyS1, I would add ``vt100'' to the getty command:
  1082.  
  1083.        S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100
  1084.  
  1085.   You can also use tset, which can establish terminal characteristics
  1086.   when you log in, and doesn't depend on any defaults.
  1087.  
  1088.   11.3.  Color ls On Serial Connections
  1089.  
  1090.   If ls is screwing up your terminal emulation with the color feature,
  1091.   turn it off.  ls --color, and ls --colour all use the color feature.
  1092.   Some installations have ls set to use color by default.  Check
  1093.   /etc/profile and /etc/csh.cshrc for ls aliases.  You can also alias ls
  1094.   to ls --no-color, if you don't want to change the system defaults.
  1095.  
  1096.   11.4.  Printing To A Printer Connected To A Terminal
  1097.  
  1098.   There is a program called vtprint, available from
  1099.   ftp://ftp.sdsu.edu/pub/vtprint, and from http://www.sdsu.edu/~garrett.
  1100.  
  1101.   Another program that will do this is called xprt.  It can be found at
  1102.   ftp://sunsite.unc.edu/pub/Linux/system/printing.
  1103.  
  1104.   11.5.  Can Linux Configure The Serial Devices Automagically?
  1105.  
  1106.   Yes.  To get Linux to detect and set up the serial devices
  1107.   automatically on startup, add the line:
  1108.  
  1109.        /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
  1110.  
  1111.   to your /etc/rc.d/rc.local or /etc/rc.d/rc.serial file.  Do this for
  1112.   every serial port you want to auto configure.  Be sure to give a
  1113.   device name that really does exist on your machine.
  1114.  
  1115.   11.5.1.  Notes For Multiport Boards
  1116.  
  1117.   For board addresses, and IRQs, look at the rc.serial that comes with
  1118.   the setserial program.  It has a lot of detail on multiport boards,
  1119.   including I/O addresses and device names.
  1120.  
  1121.   11.6.  Using A Serial Console
  1122.  
  1123.   There is an article in issue 36 of the Linux Journal,
  1124.   http://www.ssc.com/lj/issue36/index.html that explains how to use a
  1125.   serial console.  Unfortunately, email to the author bounces.  I hope
  1126.   that the article will be on the Linux Journal web site at the above
  1127.   URL soon.
  1128.  
  1129.   11.7.  Higher Serial Throughput
  1130.  
  1131.   If you are seeing slow throughput and serial port overruns on a system
  1132.   with (E)IDE disk drives, you can get hdparm.  This is a utility that
  1133.   can modify (E)IDE parameters, including unmasking other IRQs during a
  1134.   disk IRQ.  This will improve repsonsiveness and will help eliminate
  1135.   overruns.  Be sure to read the man page very carefully, since some
  1136.   drive/controller combinations don't like this and may corrupt the
  1137.   filesystem.
  1138.  
  1139.   Also have a look at a utility called irqtune that will change the IRQ
  1140.   priority of a device, for example the serial port that your modem is
  1141.   on.  This may improve the serial throughput on your system.  The
  1142.   irqtune FAQ is at http://www.best.com/~cae/irqtune.
  1143.   12.  One Step Further...
  1144.  
  1145.   This section is not required reading, but may give you some further
  1146.   insight into Unix, and the world of telecommunications.
  1147.  
  1148.   12.1.  What Are Lock Files?
  1149.  
  1150.   Lock file are simply a file saying that a particular device is in use.
  1151.   They are kept in /usr/spool/uucp, or /var/lock.  Linux lock files are
  1152.   named LCK..name, where name is either a device name, or a UUCP site
  1153.   name.  Certain processes create these locks so that they can have
  1154.   exclusive access to devices, for instance if you dial out on your
  1155.   modem, a lock will appear telling other processes that someone is
  1156.   using the modem already.  Locks mainly contain the PID of the process
  1157.   that has locked the device.  Most programs look at the lock, and try
  1158.   to determine if that lock is still valid by checking the process table
  1159.   for the process that has locked the device.  If the lock is found to
  1160.   be valid, the program (should) exit.  If not, some programs remove the
  1161.   stale lock, and use the device, creating their own lock in the
  1162.   process.  Other programs just exit and tell you that the device is in
  1163.   use.
  1164.  
  1165.   12.2.  ``baud'' Vs. ``bps''
  1166.  
  1167.   ``baud'' and ``bps'' are perhaps one of the most misused terms in the
  1168.   computing and telecommunications field.  Many people use these terms
  1169.   interchangeably, when in fact they are not!
  1170.  
  1171.      baud
  1172.         The baud rate is a measure of how many times per second a
  1173.         signal, for instance one sent by a modem (modulator-demodulator)
  1174.         changes. For example, a baud rate of 1200 implies one signal
  1175.         change every 833 microseconds. Common modem baud rates are 50,
  1176.         75, 110, 300, 600, 1200, and 2400. Most high speed modems run at
  1177.         2400 baud. Because of the bandwidth limitations on voice-grade
  1178.         phone lines, baud rates greater than 2400 are harder to achieve,
  1179.         and only work under very pristine phone line quality.  Multiple
  1180.         bits can be encoded per baud, to get bit rates that exceed the
  1181.         baud rate. ``baud'' is named after Emile Baudot, the inventor of
  1182.         the asynchronous telegraph printer.
  1183.  
  1184.      bps
  1185.         The bps rate is a measure of how many bits per second are
  1186.         transmitted.  Common modem bps rates are 50, 75, 110, 300, 1200,
  1187.         2400, 9600, ...  115200. Using modems with V.42bis compression
  1188.         (max 4:1 compression), theoretical rates up to 115200 bps are
  1189.         possible.  This is what most people mean when they misuse the
  1190.         word ``baud''.
  1191.  
  1192.   So, if high speed modems are running at 2400 baud, how can they send
  1193.   14400 bps?  The modems achive a bps rate greater than baud rate by
  1194.   encoding many bits in each signal change, or phase change. Thus, when
  1195.   2 or more bits are encoded per baud, the bps rate exceeds the baud
  1196.   rate. If your modem connects at 14400 bps, it's going to be sending 6
  1197.   bits per phase change, at 2400 baud.
  1198.  
  1199.   How did this confusion start? Well, back when low speed modems were
  1200.   high speed modems, the bps rate actually did equal the baud rate. One
  1201.   bit would be encoded per phase change. People would use bps and baud
  1202.   interchangeably, because they were the same number. For example, a 300
  1203.   bps modem also had a baud rate of 300. This all changed when faster
  1204.   modems came around, and the bit rate exceeded the baud rate.
  1205.  
  1206.   12.3.  What Are UARTs?  How Do They Affect Performance?
  1207.  
  1208.   UARTs (Universal Asyncronous Receiver Transmitter) are chips on your
  1209.   PC serial board.  Their purpose is to convert data to bits, send the
  1210.   bits down the serial line, and then rebuild the data again on the
  1211.   other end.  UARTs deal with data in byte sized pieces, which is
  1212.   conveniently also the size of ASCII characters.
  1213.  
  1214.   Say you have a terminal hooked up to your PC.  When you type a
  1215.   character, the terminal gives that character to it's transmitter (also
  1216.   a UART).  The transmitter sends that byte out onto the serial line,
  1217.   one bit at a time, at a specific rate.  On the PC end, the receiving
  1218.   UART takes all the bits and rebuilds the byte and puts it in a buffer.
  1219.  
  1220.   There are two different types of UARTs.  You have probably heard of
  1221.   dumb UARTs - the 8250 and 16450, and FIFO UARTs - the 16550A.  To
  1222.   understand their differences, first let's examine what happens when a
  1223.   UART has sent or received a byte.
  1224.  
  1225.   The UART itself can't do anything with the data, it just sends and
  1226.   receives it.  The CPU gets an interrupt from the serial device every
  1227.   time a byte has been sent or received.  The CPU then moves the
  1228.   received byte out of the UART's buffer and into memory somewhere, or
  1229.   gives the UART another byte to send. The 8250 and 16450 UARTs only
  1230.   have a 1 byte buffer.  That means, that every time 1 byte is sent or
  1231.   received, the CPU is interrupted.  At low rates, this is OK.  But, at
  1232.   high transfer rates, the CPU gets so busy dealing with the UART, that
  1233.   is doesn't have time to tend to other tasks.  In some cases, the CPU
  1234.   does not get around to servicing the interrupt in time, and the byte
  1235.   is overwritten, because they are coming in so fast.
  1236.  
  1237.   That's where the 16550A UARTs are useful.  These chips come with 16
  1238.   byte FIFOs.  This means that it can receive or transmit up to 16 bytes
  1239.   before it has to interrupt the CPU.  Not only can it wait, but the CPU
  1240.   then can transfer all 16 bytes at a time.  Although the interrupt
  1241.   threshold is seldom set at 16, this is still a significant advantage
  1242.   over the other UARTs, which only have the 1 byte buffer.  The CPU
  1243.   receives less interrupts, and is free to do other things.  Data is not
  1244.   lost, and everyone is happy.  (There is also a 16550 UART, but it is
  1245.   treated as a 16450 since it is broken.)
  1246.  
  1247.   In general, the 8250 and 16450 UARTs should be fine for speeds up to
  1248.   38400 bps.  At speeds greater than 38400 bps, you might start seeing
  1249.   data loss.  Other PC operating systems (definition used loosely here),
  1250.   like DOS aren't multitasking, so they might be able to cope better
  1251.   with 8250 or 16450s.  That's why some people don't see data loss,
  1252.   until they switch to Linux.
  1253.  
  1254.   Non-UART, and intelligent multiport boards use DSP chips to do
  1255.   additional buffering and control, thus relieving the CPU even more.
  1256.   For example, the Cyclades Cyclom, and Stallion EasyIO boards use a
  1257.   Cirrus Logic CD1400 RISC UART, and many boards use 80186 CPUs or even
  1258.   special RISC CPUs, to handle the serial I/O.
  1259.  
  1260.   Keep in mind that these dumb UART types are not bad, they just aren't
  1261.   good for high speeds.  You should have no problem connecting a
  1262.   terminal, or a mouse to these UARTs.  But, for a high speed modem, the
  1263.   16550A is definitely a must.
  1264.  
  1265.   You can buy serial boards with the 16550A UARTs for a little more
  1266.   money, just ask your dealer what type of UART is on the board.  Or if
  1267.   you want to upgrade your existing board, you can simply purchase
  1268.   16550A chips and replace your existing 16450 UARTs.  They are pin-to-
  1269.   pin compatible.  Some boards come with socketed UARTs for this
  1270.   purpose, if not you can solder.  Note that you'll probably save
  1271.   yourself a lot of trouble by just getting a new board, if you've got
  1272.   the money, they are under US$50.
  1273.  
  1274.   13.  Troubleshooting
  1275.  
  1276.   13.1.  I Keep Getting ``line NNN of inittab invalid''
  1277.  
  1278.   Make sure you are using the correct syntax for your version of init.
  1279.   The different init's that are out there use different syntax in the
  1280.   /etc/inittab file.  Make sure you are using the correct syntax for
  1281.   your version of getty.
  1282.  
  1283.   13.2.  When I Try To Dial Out, It Says ``/dev/cuaN: Device or resource
  1284.   busy''
  1285.  
  1286.   This problem can arise when DCD or DTR are not set correctly.  DCD
  1287.   should only be set when there is an actual connection (ie someone is
  1288.   dialed in), not when getty is watching the port.  Check to make sure
  1289.   that your modem is configured to only set DCD when there is a
  1290.   connection.  DTR should be set whenever something is using, or
  1291.   watching the line, like getty, kermit, or some other comm program.
  1292.  
  1293.   Another common cause of ``device busy'' errors, is that you set up
  1294.   your serial port with an interrupt already taken by something else.
  1295.   As each device initializes, it asks Linux for permission to use its
  1296.   hardware interrupt.  Linux keeps track of which interrupt is assigned
  1297.   to whom, and if your interrupt is already taken, your device won't be
  1298.   able to initialize properly.  The device really doesn't have much of
  1299.   any way to tell you that this happened, except that when you try to
  1300.   use it, it will return a ``device-busy'' error.  Check the interrupts
  1301.   on all of your boards (serial, ethernet, SCSI, etc.).  Look for IRQ
  1302.   conflicts.
  1303.  
  1304.   13.3.  I Keep Getting ``Id SN respawning too fast: disabled for 5 min¡
  1305.   utes''
  1306.  
  1307.   Make sure your modem is configured correctly.  Look at registers E and
  1308.   Q.  This can occur when your modem is chatting with getty.
  1309.  
  1310.   Make sure you are calling getty correctly from your /etc/inittab.
  1311.   Using the wrong syntax or device names will cause serious problems.
  1312.  
  1313.   Verify that your /etc/gettydefs syntax is correct by doing the
  1314.   following:
  1315.  
  1316.        linux# getty -c /etc/gettydefs
  1317.  
  1318.   This can also happen when the uugetty initialization is failing.  See
  1319.   section ``getty Or uugetty Still Doesn't Work''.
  1320.  
  1321.   13.4.  Serial Devices Are Slow, Or Serial Devices Can Only Send In One
  1322.   Direction
  1323.  
  1324.   You probably have an IRQ conflict.  Make sure there are no IRQs being
  1325.   shared.  Check all your boards (serial, ethernet, SCSI, etc...).  Make
  1326.   sure the jumper settings, and the setserial parameters are correct for
  1327.   all your serial devices.  Also check /proc/ioports and /proc/interrups
  1328.   for conflicts.
  1329.  
  1330.   13.5.  My Modem Is Hosed After Someone Hangs Up, Or uugetty doesn't
  1331.   respawn
  1332.  
  1333.   This can happen when your modem doesn't reset when DTR is dropped.  I
  1334.   saw my RD and SD LEDs go crazy when this happened to me.  You need to
  1335.   have your modem reset.  Most Hayes compatible modems do this with &D3,
  1336.   but on my USR Courier, I had to set &D2 and S13=1.  Check your modem
  1337.   manual.
  1338.  
  1339.   13.6.  I Have My Terminal Connected To My PC, But After I Type In A
  1340.   Login Name, It Just Locks Up
  1341.  
  1342.   ╖  If you are using getty: You probably don't have CLOCAL in your
  1343.      /etc/gettydefs entry for the terminal, and you're probably not
  1344.      using a full null modem cable.  You need CLOCAL, which tells Linux
  1345.      to ignore modem control signals.  Here is what it should look like:
  1346.  
  1347.        # 38400 bps Dumb Terminal entry
  1348.        DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
  1349.  
  1350.        # 19200 bps Dumb Terminal entry
  1351.        DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
  1352.  
  1353.        # 9600 bps Dumb Terminal entry
  1354.        DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
  1355.  
  1356.   Next, kill the getty process so a new one will be spawned with the new
  1357.   entry.
  1358.  
  1359.   ╖  If you are using agetty: Add the -L flag to the agetty line in your
  1360.      /etc/initab.  This will make it ignore modem control signals.  Then
  1361.      restart init by typing init q.  The entry should look like this:
  1362.  
  1363.        s1:345:respawn:/sbin/agetty -L 9600 ttyS1 vt100
  1364.  
  1365.   13.7.  At High Speeds, My Modem Looses Data
  1366.  
  1367.   If you are trying to run your modem faster than 38400 bps, and you
  1368.   don't have 16550A UARTs, you should upgrade them.  See section ``What
  1369.   Are UARTs?'' about UARTs.
  1370.  
  1371.   13.8.  On Startup, Linux Doesn't Report The Serial Devices The Way I
  1372.   Have Them Configured
  1373.  
  1374.   This is true.  Linux does not do any IRQ detection on startup, it only
  1375.   does serial device detection.  Thus, disregard what it says about the
  1376.   IRQ, because it's just assuming the standard IRQs.  This is done,
  1377.   because IRQ detection is unreliable, and can be fooled.
  1378.  
  1379.   So, even though I have my ttyS2 set at IRQ 5, I still see
  1380.  
  1381.        Jan 23 22:25:28 misfits vmunix: tty02 at 0x03e8 (irq = 4) is a 16550A
  1382.  
  1383.   when Linux boots.  You have to use setserial to tell Linux the IRQ you
  1384.   are using.  After Linux boots, you can look at the /proc/interrupts
  1385.   file, to see what IRQs are really configured.
  1386.  
  1387.   13.9.  rz And/Or sz Don't Work When I Call My Linux Box On A Modem
  1388.  
  1389.   If Linux looks for /dev/modem when you try to transfer files, look at
  1390.   /etc/profile, and /etc/csh.cshrc.  There are a bunch of aliases
  1391.   defined there on some distributions, most notably Slackware.  These
  1392.   aliases mess up the zmodem programs.  Take them out, or correct them.
  1393.  
  1394.   13.10.  My Screen Is Printing Funny Looking Characters
  1395.  
  1396.   This happens on virtual consoles when you send binary data to your
  1397.   screen, or sometimes on serial connections.  The way to fix this is to
  1398.   type echo ^v^[c.  For the control-character-impaired, thats:
  1399.  
  1400.        linux% echo <ctrl>v<esc>c
  1401.  
  1402.   13.11.  getty Or uugetty Still Doesn't Work
  1403.  
  1404.   There is a DEBUG option that comes with getty_ps.  Edit your config
  1405.   file /etc/conf.{uu}getty.ttySN and add DEBUG=NNN.  Where NNN is one of
  1406.   the following combination of numbers according to what you are trying
  1407.   to debug:
  1408.  
  1409.        D_OPT   001            option settings
  1410.        D_DEF   002            defaults file processing
  1411.        D_UTMP  004            utmp/wtmp processing
  1412.        D_INIT  010            line initialization (INIT)
  1413.        D_GTAB  020            gettytab file processing
  1414.        D_RUN   040            other runtime diagnostics
  1415.        D_RB    100            ringback debugging
  1416.        D_LOCK  200            uugetty lockfile processing
  1417.        D_SCH   400            schedule processing
  1418.        D_ALL   777            everything
  1419.  
  1420.   Setting DEBUG=010 is a good place to start.
  1421.  
  1422.   If you are running syslogd, debugging info will appear in your log
  1423.   files.  If you aren't running syslogd info will appear in
  1424.   /tmp/getty:ttySN for debugging getty and /tmp/uugetty:ttySN for
  1425.   uugetty, and in /var/adm/getty.log.  Look at the debugging info and
  1426.   see what is going on.  Most likely, you will need to tune some of the
  1427.   parameters in your config file, and reconfigure your modem.
  1428.   You could also try mgetty.  Some people have better luck with it.
  1429.  
  1430.   14.  Other Sources Of Information
  1431.  
  1432.   ╖  man pages for: agetty(8), getty(1m), gettydefs(5), init(1),
  1433.      login(1), mgetty(8), setserial(8)
  1434.  
  1435.   ╖  Your modem manual
  1436.  
  1437.   ╖  NET-3 HOWTO: all about networking, including SLIP, CSLIP, and PPP
  1438.  
  1439.   ╖  PPP HOWTO: help with PPP
  1440.  
  1441.   ╖  Printing HOWTO: for setting up a serial printer
  1442.  
  1443.   ╖  Term HOWTO: everything you wanted to know about the term program
  1444.  
  1445.   ╖  UPS HOWTO: setting up UPS boxen connected to your serial port
  1446.  
  1447.   ╖  UUCP HOWTO: for information on setting up UUCP
  1448.  
  1449.   ╖  Usenet newsgroups:
  1450.  
  1451.        comp.os.linux.answers
  1452.                FAQs, How-To's, READMEs, etc. about Linux.
  1453.        comp.os.linux.hardware
  1454.                Hardware compatibility with the Linux operating system.
  1455.        comp.os.linux.networking
  1456.                Networking and communications under Linux.
  1457.        comp.os.linux.setup
  1458.                Linux installation and system administration.
  1459.  
  1460.   ╖  The Linux serial mailing list.  To join, send email to
  1461.      majordomo@vger.rutgers.edu, with ``subscribe linux-serial'' in the
  1462.      message body.  If you send ``help'' in the message body, you get a
  1463.      help message.  The server also serves many other Linux lists.  Send
  1464.      the ``lists'' command for a list of mailing lists.
  1465.  
  1466.   ╖  A white paper discussing serial communications and multiport serial
  1467.      boards is available from Cyclades at http://www.cyclades.com.
  1468.  
  1469.   ╖  Modem FAQs:
  1470.      Navas 28800 Modem FAQ
  1471.      <http://web.aimnet.com/~jnavas/modem/faq.html>
  1472.      Curt's High Speed Modem Page
  1473.      <http://www.teleport.com/~curt/modems.html>
  1474.  
  1475.   ╖  Serial programming: Advanced Programming in the UNIX Environment
  1476.      <http://heg-
  1477.      school.aw.com/cseng/authors/stevens/advanced/advanced.nclk>, by W.
  1478.      Richard Stevens (ISBN 0-201-56317-7; Addison-Wesley)
  1479.      <http://www.ora.com/catalog/posix/> NAME="POSIX Programmer's
  1480.      Guide">, by Donald Lewine (ISBN 0-937175-73-0; O'Reilly)
  1481.  
  1482.   15.  Contributions
  1483.  
  1484.   There was no possible way to write this HOWTO alone.  Although a lot
  1485.   of the HOWTO is my writing, I have rewritten many contributions to
  1486.   maintain continuity in the writing style and flow.  Thanks to everyone
  1487.   who has contributed or commented, the list of people has gotten too
  1488.   long to list (somewhere over one hundred).  Special thanks to Ted T'so
  1489.   for answering questions about the serial drivers, Kris Gleason who
  1490.   used to maintain getty_ps, and Gert D÷ring who maintains mgetty.
  1491.  
  1492.   END OF SERIAL HOWTO
  1493.  
  1494.